package com.ht.demo.service.convert.system;

import com.ht.demo.common.appexception.AppErrorCodeEnum;
import com.ht.demo.common.appexception.AppException;
import com.ht.demo.common.constans.SystemConstant;
import com.ht.demo.common.pojo.bo.system.FilterUrlConfigBO;
import com.ht.demo.dao.domain.system.FilterUrlConfigDO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 类FilterUrlConfigBeanUtil.java的实现描述：可以跳过系统校验的请求地址配置，此表中的地址可跳过一些强制校验工具类
 * 
 * @Author hdengxian
 * @Date 2023年03月28日
 */
public class FilterUrlConfigBeanUtil {

    private FilterUrlConfigBeanUtil(){
    }

    public static FilterUrlConfigDO filterUrlConfigBOToDO(FilterUrlConfigBO srcObj) {
        if (srcObj == null) {
            return null;
        }
        FilterUrlConfigDO targetObj = new FilterUrlConfigDO();
        /**id**/
        targetObj.setId(srcObj.getFilterUrlConfigId());
        /**过滤类型：(1、过滤签名，2、过滤登录，3、过滤权限验证)**/
        targetObj.setFilterType(srcObj.getFilterType());
        /**接口地址("/"开头，结尾没有”/“，示例：/system/save)**/
        targetObj.setRequestUri(srcObj.getRequestUri());
        /**请求接口名称**/
        targetObj.setRequestName(srcObj.getRequestName());
        /**启用状态（0 默认启用，1 停用）**/
        targetObj.setEnableStatus(srcObj.getEnableStatus());
        /**创建时间**/
        targetObj.setCreateTime(srcObj.getCreateTime());
        /**更新时间**/
        targetObj.setUpdateTime(srcObj.getUpdateTime());
        /**删除标识（0 正常，1 删除）**/
        targetObj.setDeleted(srcObj.getDeleted());
        /**备注说明**/
        targetObj.setRemark(srcObj.getRemark());
        return targetObj;
    }

    public static FilterUrlConfigBO filterUrlConfigDOToBO(FilterUrlConfigDO srcObj) {
        if (srcObj == null) {
            return null;
        }
        FilterUrlConfigBO targetObj = new FilterUrlConfigBO();
        /**id**/
        targetObj.setFilterUrlConfigId(srcObj.getId());
        /**过滤类型：(1、过滤签名，2、过滤登录，3、过滤权限验证)**/
        targetObj.setFilterType(srcObj.getFilterType());
        /**接口地址("/"开头，结尾没有”/“，示例：/system/save)**/
        targetObj.setRequestUri(srcObj.getRequestUri());
        /**请求接口名称**/
        targetObj.setRequestName(srcObj.getRequestName());
        /**启用状态（0 默认启用，1 停用）**/
        targetObj.setEnableStatus(srcObj.getEnableStatus());
        /**创建时间**/
        targetObj.setCreateTime(srcObj.getCreateTime());
        /**更新时间**/
        targetObj.setUpdateTime(srcObj.getUpdateTime());
        /**删除标识（0 正常，1 删除）**/
        targetObj.setDeleted(srcObj.getDeleted());
        /**备注说明**/
        targetObj.setRemark(srcObj.getRemark());
        return targetObj;
    }

    public static List<FilterUrlConfigBO> doList2BOList(List<FilterUrlConfigDO> doList) {
        List<FilterUrlConfigBO> boList = new ArrayList<>();
        if (CollectionUtils.isEmpty(doList)) return boList;

        doList.stream().forEach(d -> boList.add(FilterUrlConfigBeanUtil.filterUrlConfigDOToBO(d)));
        return boList;
    }

    public static List<FilterUrlConfigDO> boList2DOList(List<FilterUrlConfigBO> boList) {
        List<FilterUrlConfigDO> doList = new ArrayList<>();
        if (CollectionUtils.isEmpty(boList)) return doList;

        boList.stream().forEach(b -> doList.add(FilterUrlConfigBeanUtil.filterUrlConfigBOToDO(b)));
        return doList;
    }

    public static void addCheckParam(FilterUrlConfigBO configBO) {
        if (configBO == null) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_ERROR);
        }
        if (StringUtils.isBlank(configBO.getFilterType())) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_ERROR);
        }
        if (StringUtils.isBlank(configBO.getRequestUri())) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_ERROR);
        }
        if (StringUtils.isBlank(configBO.getRequestName())) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_ERROR);
        }
        if (StringUtils.isBlank(configBO.getEnableStatus())) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_ERROR);
        }
        if (configBO.getFilterType().equals(SystemConstant.STR_1)) {
            configBO.setRemark("该接口跳过【登录验证】");
        }
        if (configBO.getFilterType().equals(SystemConstant.STR_2)) {
            configBO.setRemark("该接口跳过【签名验证】");
        }
        //权限验证不放开使用，可根据自己的需求选择放开，目前，不需要权限验证的接口，不加注解 @Permission 即可
        if (configBO.getFilterType().equals(SystemConstant.STR_3)) {
            configBO.setRemark("该接口跳过【权限验证】");
        }
    }
}